package com.bookrecomm.crawler;

import com.bookrecomm.crawler.service.BookCrawler;
import com.bookrecomm.crawler.service.impl.DangdangCrawler;
import com.bookrecomm.crawler.service.impl.AcademicCrawler;
import lombok.extern.slf4j.Slf4j;

import java.util.Scanner;

/**
 * 图书爬虫应用程序入口
 * 负责启动和管理爬虫任务
 */
@Slf4j
public class BookCrawlerApplication {
    
    public static void main(String[] args) {
        log.info("图书推荐系统爬虫程序启动...");
        
        // 创建控制台输入
        Scanner scanner = new Scanner(System.in);
        
        while (true) {
            // 显示菜单
            System.out.println("\n========== 图书爬虫系统 ==========");
            System.out.println("1. 爬取当当网图书数据");
            System.out.println("2. 爬取学术平台图书数据");
            System.out.println("0. 退出系统");
            System.out.print("请选择操作: ");
            
            // 获取用户输入
            int choice = 0;
            try {
                choice = Integer.parseInt(scanner.nextLine());
            } catch (NumberFormatException e) {
                System.out.println("输入无效，请重新选择！");
                continue;
            }
            
            // 处理用户选择
            switch (choice) {
                case 1:
                    crawlDangdangBooks(scanner);
                    break;
                case 2:
                    crawlAcademicBooks(scanner);
                    break;
                case 0:
                    log.info("图书爬虫程序退出");
                    scanner.close();
                    System.exit(0);
                    break;
                default:
                    System.out.println("选择无效，请重新选择！");
                    break;
            }
        }
    }
    
    /**
     * 爬取当当网图书数据
     * @param scanner 控制台输入
     */
    private static void crawlDangdangBooks(Scanner scanner) {
        System.out.println("\n===== 爬取当当网图书数据 =====");
        System.out.println("请输入图书分类代码（例如：01.54.06.00.00.00表示计算机/网络）：");
        String categoryCode = scanner.nextLine().trim();
        
        System.out.println("请输入起始页码：");
        int startPage = Integer.parseInt(scanner.nextLine().trim());
        
        System.out.println("请输入结束页码：");
        int endPage = Integer.parseInt(scanner.nextLine().trim());
        
        System.out.println("开始爬取当当网图书数据，分类：" + categoryCode + "，页码范围：" + startPage + "-" + endPage);
        
        // 创建当当网爬虫
        BookCrawler crawler = new DangdangCrawler();
        
        // 启动爬虫
        try {
            crawler.startCrawl(categoryCode, startPage, endPage);
            System.out.println("当当网图书数据爬取完成！");
        } catch (Exception e) {
            log.error("爬取当当网图书数据失败", e);
            System.out.println("爬取过程中出现错误：" + e.getMessage());
        }
    }
    
    /**
     * 爬取学术平台图书数据
     * @param scanner 控制台输入
     */
    private static void crawlAcademicBooks(Scanner scanner) {
        System.out.println("\n===== 爬取学术平台图书数据 =====");
        System.out.println("请输入学术分类URL（例如：computer-science）：");
        String categoryUrl = scanner.nextLine().trim();
        
        System.out.println("请输入起始页码：");
        int startPage = Integer.parseInt(scanner.nextLine().trim());
        
        System.out.println("请输入结束页码：");
        int endPage = Integer.parseInt(scanner.nextLine().trim());
        
        System.out.println("开始爬取学术平台图书数据，分类：" + categoryUrl + "，页码范围：" + startPage + "-" + endPage);
        
        // 创建学术平台爬虫
        BookCrawler crawler = new AcademicCrawler();
        
        // 启动爬虫
        try {
            crawler.startCrawl(categoryUrl, startPage, endPage);
            System.out.println("学术平台图书数据爬取完成！");
        } catch (Exception e) {
            log.error("爬取学术平台图书数据失败", e);
            System.out.println("爬取过程中出现错误：" + e.getMessage());
        }
    }
}
